package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import muhnes.sizoo.dal.AreaprotegidaDao;
import muhnes.sizoo.dal.FabricaDAO;
import muhnes.sizoo.dal.ZonaDao;
import muhnes.sizoo.modelo.Areaprotegida;
import muhnes.sizoo.modelo.Zona;
import muhnes.sizoo.util.Transaccion;

/**
 * Clase controladora que da mantenimiento a la vista de areas protegidas
 * @author Ricardo Orellana
 */
@ManagedBean(name = "areaprotegidaBean")
@ViewScoped
public class AreaprotegidaBean extends CRUDBean< Areaprotegida, AreaprotegidaDao > implements Serializable {
    
    private List< SelectItem > itemsMunicipio;
    private List< SelectItem > itemsZona;
    
    /**
     * Crea una nueva instancia de AreaprotegidaBean
     */
    public AreaprotegidaBean () {
        super( Areaprotegida.class );
        vistaProtegida = "areaprotegida";
    }
        
    /**
     * Metodo que devuelve una lista de zonas
     * @return devuelve un objeto de tipo list que contiene todos los items
     */
    public List< SelectItem > getItemsZona() {
        if( itemsZona == null ) {
            itemsZona = new ArrayList< SelectItem >();
            ZonaDao zonaDao = FabricaDAO.crearZonaDao();
            for( Zona zona : zonaDao.buscarTodos() ) {
                Zona z = zonaDao.removerProxy(zona);
                SelectItem item = new SelectItem( z,
                        z.getMunicipio().getDepartamento().getNombre() 
                        + ", " + z.getMunicipio().getNombre());
                itemsZona.add( item );
            }
        }
        return itemsZona;
    }
    
    /**
     * Metodo que devuelve una lista de zonas asociadas con areas protegidas
     * @return devuelve un objeto de tipo list que contiene todos los items
     */
    public List<Zona> getZonaAreaprotegida() {
        List<Zona> zonaAreaprotegida = new ArrayList<Zona>();     
        for( Zona zona : entidad.getZonas() ) {
            
             zonaAreaprotegida.add( zona );
        }
        
        return  zonaAreaprotegida;
        
    }
    /**
     * Metodo que asigna el valor de area protegida con zona
     * @param zonas de tipo List<Zona>
     */
    public void setZonaAreaprotegida( List<Zona> zonas ) {
        Set<Zona>  zonaAreaprotegida = new HashSet<Zona>();
        for( Zona zona : zonas ) {
             zonaAreaprotegida.add( zona );
        }
        entidad.setZonas( zonaAreaprotegida);
    }

    /**
     * Metodo para instanciar la interfaz dao de area protegida
     * 
     */
    @Override
    protected AreaprotegidaDao getDAO () {
        return FabricaDAO.crearAreaprotegidaDao();
    }

    /**
     * 
     * @param transaccion indica que transaccion se debera realizar 
     * @return objeto de tipo boolean que indica que tipo de transaccion se realizara
     */
    @Override
    protected boolean debeValidar (Transaccion transaccion) {
        boolean validacion = false;
        
        switch( transaccion ) {
            case INSERCION:
            case ACTUALIZACION:
            case ELIMINACION:
                validacion = true;
        }
        
        return validacion;
    }

}